/**
 * 静态方法 & 动态方法的调用
 *      静态的方法（属性）：
 *          在静态方法中，只能调用静态的资源。原因是，静态资源会在项目启动之初，就在内存中开辟空间存放
 *          而动态资源，则会在调用的时候才会开辟空间，进行存储，即，静态资源先与动态资源创建。
 *          总结出来：在静态方法中，不调用动态的方法和属性
 *          想要在静态方法中，调用动态方法，就需要创建对象，通过对象来实现动态方法的调用
 *
 *      动态的方法（属性）：
 *          动态的方法中，没有限制，可以调用动态的方法，也可以调用静态的方法。
 *          在同一个类中，动态方法之间的相互调用，直接：方法名(传参)
 *
 *      不同类中，静态方法的调用： 静态方法的调用，类名.方法名([传参])
 *      不同类中，动态方法的调用： 创建对象.方法名([传参])
 */
public class Demo03 {

    public int sum = 0;

    public static void main(String[] args) {

        /*
            区分：静态方法中，可以声明动态的变量，这是声明变量，不是引用变量
         */
        int num = 10;

        /*
            Non-static field 'sum' cannot be referenced from a static context
         */
//        System.out.println(sum);

        /*
            Non-static method 'start()' cannot be referenced from a static context
         */
//        start();

        Demo03 d = new Demo03();
        d.start();

    }

    public void start(){
        System.out.println("我是start()");
    }

    public void add(){
        start();

        /*
            这种方式不对，在同一个类中，动态方法之间的相互调用，直接方法名(传参)
            不需要通过创建对象的方式来调用
         */
//        Demo03 d = new Demo03();
//        d.start();
    }

    public static void run(){
        System.out.println("这是一个静态方法");
    }
}

class DemoTest{

    public static void main(String[] args) {

        /*
            静态方法的调用，类名.方法名([传参])
         */
        Demo03.run();

        /*
            动态方法的调用，创建对象.方法名([传参])
         */
        Demo03 demo03 = new Demo03();
        demo03.add();
    }
}
